#include <stdio.h>
#define MAX_SIZE 100
typedef int ElemType;
typedef struct
{
    ElemType data;
    int cur;
}Node, SLinkList[MAX_SIZE];
// 将未使用空间连接到备用链表
void InitSpace(SLinkList &space)
{
    for (int i = 0; i < MAX_SIZE-1; ++i)
        space[i].cur = i + 1;
    space[MAX_SIZE-1].cur = 0;
}
// 分配一个节点, 成功返回对应位置，失败返回0, space[0]是备用链表头结点
int Malloc_SL(SLinkList &space)
{
    int i = space[0].cur;
    if (i)
        space[0].cur = space[i].cur;
    return i;
}
// 释放一个节点到备用节点
void Free_SL(SLinkList &space, int i)
{
    space[i].cur = space[0].cur;
    space[0].cur = i;
}
// 计算(A-B)∪(B-A)
void difference(SLinkList &space, int &S)
{
    // 建立备用空间
    InitSpace(space);
    // 分配头结点
    S = Malloc_SL(space);
    // 获取集合A，B元素个数
    int ca, cb;
    scanf("%d%d", &ca, &cb);
    int r = S; // r指向静态链表（集合A）最后一个元素
    // 将集合A元素进入静态链表
    for (int i = 0; i < ca; ++i)
    {
        int node = Malloc_SL(space);
        scanf("%d", &space[node].data);
        space[r].cur = node;
        r = node;
    }
    space[r].cur = 0; // 此时r指向最后一个元素
    // 将集合B中的元素进入静态链表
    for (int i = 0; i < cb; i++)
    {
        int b;
        scanf("%d", &b);
        int pre = S, now = space[S].cur;
        // 查找当前元素是否在A中存在
        while (now != space[r].cur && space[now].data != b)
        {
            pre = now;
            now = space[now].cur;
        }
        // 判断上面循环是如何结束的
        // 循环因为搜索不到结束，需要在结尾新增当前元素
        if (now == space[r].cur)
        {
            int node = Malloc_SL(space);
            space[node].data = b;
            space[node].cur = space[r].cur;
            space[r].cur = node; 
        }
        else // space[now].cur == b 此时需要删除重复节点now
        {
            space[pre].cur = space[now].cur;
            Free_SL(space, now);
            if (now == r)
                r = pre;
        }
    }
}
void Traverse_SL(SLinkList space, int head)
{
    int p = space[head].cur;
    while (p)
    {
        printf("%3d", space[p].data);
        p = space[p].cur;
    }
}
int main(void)
{
    SLinkList Space;
    int head;
    difference(Space, head);
    Traverse_SL(Space, head);

    return 0;
}